vector<vector<int> > ZLevelOrder(TreeNode* root)
{
    if(!root)
        return {};
    vector<vector<int>> ret;
    queue<TreeNode*>q;
    q.push(root);
    int count=1;//用来判断在哪一层，奇数层从左往右，偶数层从右往左
    while(!q.empty())
    {
        int l=q.size();
        vector<int> v(l);//保存每一层的节点,这可能会导致访问超出向量边界的错误
        for(int i=0;i<l;i++)
        {
            TreeNode* tmp = q.front();
            q.pop();
            int index = (count % 2 == 1) ? i : (l - 1 - i); // 根据层数奇偶性确定存储的下标
            v[index]=tmp->val;

            if(tmp->left)
                q.push(tmp->left);
            if(tmp->right)
                q.push(tmp->right);                           
        }
        ret.push_back(v);
        count++;  
        v.clear();
    }
    return ret;
}